home *** CD-ROM | disk | FTP | other *** search
/ Komputer for Alle 2001 #11 / CD 11 (Black) - 2001.iso / FAVORG / FAVO_SRC.ZIP / bystatedlg.cpp next >
Encoding:
C/C++ Source or Header  |  2000-10-25  |  5.1 KB  |  183 lines

  1. // FAVORG Version 1.1
  2. // Copyright (c) 2000 Ziff Davis Media, Inc.
  3. // All rights reserved.
  4. // First Published in PC Magazine, US Edition, November 7, 2000.
  5. // Programmer: Patrick Philippot
  6.  
  7. #include "stdafx.h"
  8. #include "favorg.h"
  9. #include "favorghlp.h"
  10. #include "multiseltreectrl.h"
  11. #include "favorgtreectl.h"
  12. #include "ByStateDlg.h"
  13.  
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19.  
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CByStateDlg dialog
  22.  
  23.  
  24. CByStateDlg::CByStateDlg(CWnd* pParent /*=NULL*/)
  25.     : CDialog(CByStateDlg::IDD, pParent)
  26. {
  27.     //{{AFX_DATA_INIT(CByStateDlg)
  28.     m_bPageNotFound = FALSE;
  29.     m_bAccessDenied = FALSE;
  30.     m_bSiteNone = FALSE;
  31.     m_bTimeOut = FALSE;
  32.     //}}AFX_DATA_INIT
  33. }
  34.  
  35.  
  36. void CByStateDlg::DoDataExchange(CDataExchange* pDX)
  37. {
  38.     CDialog::DoDataExchange(pDX);
  39.     //{{AFX_DATA_MAP(CByStateDlg)
  40.     DDX_Check(pDX, IDC_CHECK_PAGENONE, m_bPageNotFound);
  41.     DDX_Check(pDX, IDC_CHECK_ACCESSDENIED, m_bAccessDenied);
  42.     DDX_Check(pDX, IDC_CHECK_SITENONE, m_bSiteNone);
  43.     DDX_Check(pDX, IDC_CHECK_TIMEOUT, m_bTimeOut);
  44.     //}}AFX_DATA_MAP
  45. }
  46.  
  47.  
  48. BEGIN_MESSAGE_MAP(CByStateDlg, CDialog)
  49.     //{{AFX_MSG_MAP(CByStateDlg)
  50.     ON_BN_CLICKED(IDC_CHECK_ACCESSDENIED, OnCheckAccessDenied)
  51.     ON_BN_CLICKED(IDC_CHECK_PAGENONE, OnCheckPageNone)
  52.     ON_BN_CLICKED(IDC_CHECK_SITENONE, OnCheckSiteNone)
  53.     ON_BN_CLICKED(IDC_CHECK_TIMEOUT, OnCheckTimeout)
  54.     ON_BN_CLICKED(IDHELP, OnHelp)
  55.     //}}AFX_MSG_MAP
  56. END_MESSAGE_MAP()
  57.  
  58. /////////////////////////////////////////////////////////////////////////////
  59. // CByStateDlg implementation
  60.  
  61. BOOL CByStateDlg::OnInitDialog() 
  62. {
  63.     CDialog::OnInitDialog();
  64.     
  65.     SetDlgItemText(IDC_COUNT, "0");
  66.  
  67.     CString sCount;
  68.  
  69.     // Count how many shortcuts have a given status
  70.     m_nCount = 0;
  71.     CountItemsByState(m_pFavTree->GetRootItem(), TRUE, FALSE, FALSE, FALSE);
  72.     m_nCountAccessDenied = m_nCount;
  73.     sCount.Format("%d items", m_nCount);
  74.     SetDlgItemText(IDC_ACCESSDENIED_COUNT, sCount);
  75.  
  76.     m_nCount = 0;
  77.     CountItemsByState(m_pFavTree->GetRootItem(), FALSE, TRUE, FALSE, FALSE);
  78.     m_nCountTimeout = m_nCount;
  79.     sCount.Format("%d items", m_nCount);
  80.     SetDlgItemText(IDC_TIMEOUT_COUNT, sCount);
  81.  
  82.     m_nCount = 0;
  83.     CountItemsByState(m_pFavTree->GetRootItem(), FALSE, FALSE, TRUE, FALSE);
  84.     m_nCountPageNotFound = m_nCount;
  85.     sCount.Format("%d items", m_nCount);
  86.     SetDlgItemText(IDC_PAGENOTFOUND_COUNT, sCount);
  87.  
  88.     m_nCount = 0;
  89.     CountItemsByState(m_pFavTree->GetRootItem(), FALSE, FALSE, FALSE, TRUE);
  90.     m_nCountSiteNone = m_nCount;
  91.     sCount.Format("%d items", m_nCount);
  92.     SetDlgItemText(IDC_SITENOTFOUND_COUNT, sCount);
  93.  
  94.     return TRUE;  // return TRUE unless you set the focus to a control
  95.                   // EXCEPTION: OCX Property Pages should return FALSE
  96. }
  97.  
  98. void CByStateDlg::CheckItemState(HTREEITEM hItem, BOOL bAccessDenied, BOOL bTimeout, BOOL bPageNotFound, BOOL bSiteNone)
  99. {
  100.     int nActualState = m_pFavTree->GetItemState(hItem, TVIS_STATEIMAGEMASK) & ~0xFF;
  101.  
  102.     // If item has one of the user defined state, delete it
  103.     if (((nActualState == INDEXTOSTATEIMAGEMASK(STATE_INDEX_ACCESSDENIED)) && bAccessDenied)
  104.          ||
  105.          ((nActualState == INDEXTOSTATEIMAGEMASK(STATE_INDEX_PAGENONE)) && bPageNotFound)
  106.          ||
  107.          ((nActualState == INDEXTOSTATEIMAGEMASK(STATE_INDEX_SITENONE))&& bSiteNone)
  108.          ||
  109.          ((nActualState == INDEXTOSTATEIMAGEMASK(STATE_INDEX_TIMEOUT)) && bTimeout))
  110.     {
  111.         m_nCount++;
  112.     }
  113. }
  114.  
  115. void CByStateDlg::CountItemsByState(HTREEITEM hItem, BOOL bAccessDenied, BOOL bTimeout, BOOL bPageNotFound, BOOL bSiteNone)
  116. {
  117.     if (m_pFavTree->GetItemData(hItem) == ITEM_IS_FOLDER)
  118.     {
  119.         // It's a folder
  120.         // Process all items in this folder
  121.         HTREEITEM hChildItem = m_pFavTree->GetChildItem(hItem);
  122.  
  123.         while (hChildItem != NULL)
  124.         {
  125.             if (m_pFavTree->GetItemData(hChildItem) == ITEM_IS_FOLDER)
  126.                 CountItemsByState(hChildItem, bAccessDenied, bTimeout, bPageNotFound, bSiteNone);
  127.             else
  128.                 CheckItemState(hChildItem, bAccessDenied, bTimeout, bPageNotFound, bSiteNone);
  129.             hChildItem = m_pFavTree->GetNextItem(hChildItem, TVGN_NEXT);
  130.         }
  131.     }
  132.     else
  133.         CheckItemState(hItem, bAccessDenied, bTimeout, bPageNotFound, bSiteNone);
  134. }
  135.  
  136. void CByStateDlg::CountByState()
  137. {
  138.     m_nCount = 0;
  139.  
  140.     if (m_bAccessDenied)
  141.         m_nCount += m_nCountAccessDenied;
  142.     if (m_bTimeOut)
  143.         m_nCount += m_nCountTimeout;
  144.     if (m_bPageNotFound)
  145.         m_nCount += m_nCountPageNotFound;
  146.     if (m_bSiteNone)
  147.         m_nCount += m_nCountSiteNone;
  148.  
  149.     CString sCount;
  150.     sCount.Format("%d", m_nCount);
  151.     SetDlgItemText(IDC_COUNT, sCount);
  152. }
  153.  
  154. void CByStateDlg::OnCheckAccessDenied() 
  155. {
  156.     m_bAccessDenied = ((CButton*) GetDlgItem(IDC_CHECK_ACCESSDENIED))->GetCheck() == 1;
  157.     CountByState();
  158. }
  159.  
  160. void CByStateDlg::OnCheckPageNone() 
  161. {
  162.     m_bPageNotFound = ((CButton*) GetDlgItem(IDC_CHECK_PAGENONE))->GetCheck() == 1;
  163.     CountByState();
  164. }
  165.  
  166. void CByStateDlg::OnCheckSiteNone() 
  167. {
  168.     m_bSiteNone = ((CButton*) GetDlgItem(IDC_CHECK_SITENONE))->GetCheck() == 1;
  169.     CountByState();
  170. }
  171.  
  172. void CByStateDlg::OnCheckTimeout() 
  173. {
  174.     m_bTimeOut = ((CButton*) GetDlgItem(IDC_CHECK_TIMEOUT))->GetCheck() == 1;
  175.     CountByState();
  176. }
  177.  
  178.  
  179. void CByStateDlg::OnHelp() 
  180. {
  181.     AfxGetApp()->WinHelp(HIDD_DELETEBYSTATUS);
  182. }
  183.